#!/usr/bin/perl

use File::Temp;
use File::Copy;
use CGI;
use C4::Context;
use C4::Auth;
use C4::Output;

#my $destdir = "/usr/local/koha/intranet/htdocs/intranet-tmpl/images/patronpictures";
#my $uploadfile = shift @ARGV;
my $input = new CGI;
my $destdir = C4::Context->config('intrahtdocs') . "/patronimages";

warn "DEST : $destdir";
my ($template, $loggedinuser, $cookie)
	= get_template_and_user({template_name => "tools/picture-upload.tmpl",
					query => $input,
					type => "intranet",
					authnotrequired => 0,
					flagsrequired => {management => 1, tools => 1},
					debug => 0,
					});

unless (-d $destdir) {
	$errors{'NODIR'} = 1;
	warn "patronimages directory not present";
}
if ( %errors ) {
    $template->param( ERRORS => [ \%errors ] );
}
my $uploadfilename = $input->param( 'uploadfile' );
my $uploadfile = $input->upload( 'uploadfile' );
my ( $total, $handled, @counts );

if ( $uploadfile ) {
    my $dirname = File::Temp::tempdir( CLEANUP => 1);
    my ( $tfh, $tempfile ) = File::Temp::tempfile( SUFFIX => '.zip', UNLINK => 1 );
    my ( @directories, %errors );

    $errors{'NOTZIP'} = 1 unless ( $uploadfilename =~ /\.zip$/i );
    $errors{'NOWRITETEMP'} = 1 unless ( -w $dirname );
    $errors{'NOWRITEDEST'} = 1 unless ( -w $destdir );
    $errors{'EMPTYUPLOAD'} = 1 unless ( length( $uploadfile ) > 0 );

    if ( %errors ) {
	$template->param( ERRORS => [ \%errors ] );
    } else {
	while ( <$uploadfile> ) {
	    print $tfh $_;
	}

	close $tfh;

	system("unzip $tempfile -d $dirname");

	push @directories, "$dirname";
	foreach $recursive_dir ( @directories ) {
	    opendir $dir, $recursive_dir;
	    while ( my $entry = readdir $dir ) {
			push @directories, "$recursive_dir/$entry" if ( -d "$recursive_dir/$entry" and $entry !~ /^\./ );
	    }
	    closedir $dir;
	}

	foreach my $dir ( @directories ) {
	    $handled += handle_dir( $dir );
	}

	$total = scalar @directories;

	$template->param(
			 TOTAL => $total,
			 HANDLED => $handled,
			 COUNTS => \@counts,
			 );
    }
}

output_html_with_http_headers $input, $cookie, $template->output;

sub handle_dir {
    my ( $dir ) = @_;
    my ( %count );
    $count{filenames} = ();

    my $file = ( -r "$dir/IDLINK.TXT" ) ? "$dir/IDLINK.TXT" : "$dir/DATALINK.TXT";
    unless (open (FILE, $file)) { 
		print "Openning $dir/$file failed!\n";
		return 0;
	};

    while (my $line = <FILE>) {
		chomp $line;
		my ( $filename, $cardnumber );
		my $delim = ($line =~ /\t/) ? "\t" : ",";
		($cardnumber, $filename) = split $delim, $line;
		$cardnumber =~ s/[\"\r\n]//g;  # remove offensive characters
		$filename   =~ s/[\"\r\n]//g;

		if ($cardnumber && $filename) {
	    	my $result = move ( "$dir/$filename", "$destdir/$cardnumber.jpg" );
			if ( $result ) {
				$count{count}++;
				push @{ $count{filenames} }, { source => $filename, dest => $cardnumber .".jpg" };
			}
		}
    }
    $count{source} = $dir;
    $count{dest} = $destdir;
    push @counts, \%count;
    close FILE;
    return 1;
}
